package cn.px.service.sb;

import cn.px.common.bean.AbstractPageResultBean;
import cn.px.dao.bean.MyVOPage;
import cn.px.dao.dto.sb.SbInfoDTO;
import cn.px.dao.entity.sb.SbInfo;
import cn.px.dao.vo.sb.SbInfoScreenDetailVO;
import cn.px.dao.vo.sb.SbInfoScreenVO;
import cn.px.dao.vo.sb.SbInfoVO;
import cn.px.service.base.IBaseService;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

/**
 * @Description 设备基础信息 service
 * @author 品讯科技
 * @date 2024-08
 * @Version Copyright (c) 2019,北京乾元坤和科技有限公司 All rights reserved.
 */
public interface SbInfoService extends IBaseService<SbInfo, SbInfoDTO> {

    /**
     * 根据主键更新属性不为null的值
     *
     * @param model
     */
    void modModelByDTOIgnore(SbInfoDTO model);

    /**
     * 选择父子两种类别，进行树形菜单构造
     *
     * @param model
     * @return
     */
    public List<SbInfo> getModelListTreeByDTO(SbInfoDTO model);

    /**
     * 选择在报修状态的设备、显示的设备
     *  显示标准
     *      1：
     * @param model
     * @return
     */
    public SbInfoScreenVO getModelListRepairAndShowByDTO(SbInfoDTO model);
    /**
     * 批量删除
     *
     * @param ids ：
     * @return ：
     */
    int batchDelete(List<String> ids);

    /**
     * 批量更新，用于定时任务生成后更新设备的保养、润换时间
     *
     * @param list
     * @return
     */
    void updateBatch(List<SbInfoVO> list);

    /**
     * 批量更新当前价值，用于定时任务生成后更新设备的保养、润换时间
     *
     * @param list
     * @return
     */
    void updateBatchValue(List<SbInfo> list);

    /**
     * 分页查询
     *
     * @param dto :
     * @return :
     */
    List<SbInfoVO> selectVOList(SbInfoDTO dto);

    /**
     * 分页查询
     *
     * @param dto
     * @return
     */
    List<SbInfoScreenDetailVO> selectScreenDetailVOList(SbInfoDTO dto);

    /**
     * 导出查询
     *
     * @param dto :
     * @return :
     */
    List<SbInfoVO> selectExportVOList(SbInfoDTO dto);

    /**
     * 分页查询
     *
     * @param dto      :
     * @param pageNum  :
     * @param pageSize :
     * @return :
     */
    MyVOPage<SbInfoVO> selectVOPage(SbInfoDTO dto, int pageNum, int pageSize);

    /**
     * 分页查询
     *
     * @param dto      :
     * @param pageNum  :
     * @param pageSize :
     * @return :
     */
    MyVOPage<SbInfoVO> selectVOPageByRole(SbInfoDTO dto, int pageNum, int pageSize);
    /**
     * 分页查询
     *
     * @param dto      :
     * @param pageNum  :
     * @param pageSize :
     * @return :
     */
    MyVOPage<SbInfoVO> selectVOPageStandard(SbInfoDTO dto, int pageNum, int pageSize);

    /**
     * 分页查询
     *
     * @param dto      :
     * @param pageNum  :
     * @param pageSize :
     * @return :
     */
    MyVOPage<SbInfoVO> selectVOPageByFilter(SbInfoDTO dto, int pageNum, int pageSize);

    /**
     * 根据主键查询
     *
     * @param id :
     * @return :
     */
    SbInfoVO getById(Object id);

    /**
     * 根据编号查询
     *
     * @param no :
     * @return :
     */
    SbInfoVO getScreenDetailByNo(String no);

    /**
     * 分页查询
     *
     * @param dto :
     * @return :
     */
    MyVOPage<SbInfoVO> selectVOPageByPosition(SbInfoDTO dto, int pageNum, int pageSize);

    /**
     * 复制设备信息
     *
     * @param model
     * @return
     */
    public SbInfo saveModelByDTOCopy(SbInfoDTO model);
    /**
     * 通过状态统计
     *
     * @return ：
     */
    int countByStatus(Integer... status);


    /**
     * 获取列表 - 通过登录人获取指定部门下的归属设备，不包含子集设备
     *
     * @param model :
     * @return :
     */
    List<SbInfoVO> selectDeptSbInfosByUser(SbInfoDTO model);

    /**
     * 获取列表 - 通过登录人获取指定部门下的归属设备，不包含子集设备
     *
     * @param model    :
     * @param pageNum  :
     * @param pageSize :
     * @return :
     */
    MyVOPage<SbInfoVO> selectDeptSbInfosByUserPage(SbInfoDTO model, int pageNum, int pageSize);

    /**
     * 获取列表 - 通通过用户身份获取设备
     *
     * @param model    :
     * @param pageNum  :
     * @param pageSize :
     * @return :
     */
    MyVOPage<SbInfoVO> selectPageByUserIdentityType(SbInfoDTO model, int pageNum, int pageSize);

    /**
     * 修改总行驶里程，总行驶小时
     *
     * @param modelList ：
     */
    void updateTotalById(List<SbInfoDTO> modelList);

    /**
     * 改变设备状态
     *
     * @param model ：
     */
    void updateStatus(SbInfoDTO model);

    /**
     * 设置设备部门组织架构
     *
     * @param update ：
     */
    void initSbDept(SbInfoDTO update);

    /**
     * 批量修改设备信息
     *
     * @param ids    ：
     * @param sbInfo ：
     */
    void updateBySbIds(List<String> ids, SbInfo sbInfo);

    /**
     * 批量修改设备信息
     *
     * @param ids    ：
     * @param sbInfo ：
     */
    void updateBySbIds(List<String> ids, SbInfoDTO sbInfo);

    /**
     * 修改二维码
     *
     * @param model ：
     */
    void updateQrCode(SbInfoDTO model);

    String importListByAdd(MultipartFile file);
    String importListByUpdateALl(MultipartFile file);

    /**
     * 选择已经到了预警期限内的设备列表
     *
     * @param record
     * @param pageNum
     * @param pageSize
     * @return
     */
    public AbstractPageResultBean<SbInfoVO> selectPageInfoForWarn(SbInfoDTO record, int pageNum, int pageSize);

    void updateBatchChild(List<SbInfoDTO> sbInfoDTOList);

    void updateCancelChild(String id);

    public SbInfo selectByNo(String zbh);

    public SbInfo selectByZbh(String zbh);

    void modModelByDTOForScrap(SbInfoDTO sbInfoDTO);

    void submitScrapAudit(SbInfoDTO sbInfoDTO);

    void audit(SbInfoDTO sbInfoDTO);

    List<SbInfoVO> getByIds(List<String> ids);

    void generateSbCodeAll();

    void modImagesByDTO(SbInfoDTO sbInfoDTO);
}
